package com.asambleacristiana.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * Esta clase representa a los usuarios disponibles en el sistema y que
 * interactuan con el sistema.
 * 
 * @author PBalegno
 * */

@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2053080636092163461L;
	@Id
	@Column(name = "apodo")
	private String apodo;
	@Column(name = "nombre")
	private String nombre;
	@Column(name = "apellido")
	private String apellido;
	@Column(name = "password")
	private String password;
	@Column(name = "debe_cambiar_pass", columnDefinition = "INT(1)")
	private boolean debeCambiarPass;
	@Column(name = "mail")
	private String mail;
	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "usuario_zona", joinColumns = { @JoinColumn(name = "apodo") }, inverseJoinColumns = { @JoinColumn(name = "zn_codigo") })
	private List<Zona> zonas;
	
	@Transient
	private List<String> permisos;
	
	@Transient
	private Zona zonaSeleccionada;

	public Usuario() {
	}

	@Transient
	public List<Zona> getAllZonas() {
		List<Zona> zonas = new ArrayList<Zona>();
		zonas.addAll(getZonaSeleccionada().getZonasAsociadas());
		zonas.add(getZonaSeleccionada());
		return zonas;
	}

	public String getApodo() {
		return apodo;
	}

	public String getNombre() {
		return nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Boolean getDebeCambiarPass() {
		return debeCambiarPass;
	}

	public void setDebeCambiarPass(boolean debeCambiarPass) {
		this.debeCambiarPass = debeCambiarPass;
	}

	public String getMail() {
		return mail;
	}

	public List<Zona> getZonas() {
		return zonas;
	}

	public void setZonaSeleccionada(Zona zonaSeleccionada) {
		this.zonaSeleccionada = zonaSeleccionada;
	}

	public List<String> getPermisos() {
		return permisos;
	}

	public Zona getZonaSeleccionada() {
		return zonaSeleccionada;
	}

	public void setPermisos(List<String> permisos) {
		this.permisos = permisos;
	}

}
